<html>

<body>

<p>Contexts and Dependency Injection (CDI) defines a set of 
complementary services that help improve the structure of application
code.</p>

<ul>
<li>A well-defined lifecycle for stateful
{@linkplain jakarta.enterprise.inject beans} bound to well-defined 
lifecycle {@linkplain jakarta.enterprise.context contexts}, where 
the set of contexts is {@linkplain jakarta.enterprise.context.spi 
extensible}</li>
<li>A sophisticated, typesafe {@linkplain jakarta.enterprise.inject
    dependency injection mechanism}, including the ability to select
    dependencies at either {@linkplain jakarta.inject.Qualifier development}
    or {@linkplain jakarta.enterprise.inject.Alternative deployment} time,
    without verbose configuration</li>
<li>Support for Java EE modularity and the Java EE component
architecture&mdash;the modular structure of a Java EE application is 
taken into account when resolving dependencies between Java EE 
components</li>
<li>{@linkplain jakarta.enterprise.inject Integration} with the 
Unified Expression Language, allowing any bean to be used directly 
within a JSF or JSP page</li>
<li>The ability to {@linkplain jakarta.decorator decorate} injected 
beans</li>
<li>The ability to associate 
{@linkplain jakarta.interceptor interceptors} with beans via typesafe
{@linkplain jakarta.enterprise.inject interceptor bindings}</li>
<li>An {@linkplain jakarta.enterprise.event event} notification model</li>
<li>A web {@linkplain jakarta.enterprise.context.ConversationScoped
    conversation context} in addition to the three standard
    web contexts defined by the Java Servlets specification</li>
<li>An {@linkplain jakarta.enterprise.inject.spi SPI} allowing portable 
extensions to integrate cleanly with the container</li>
</ul>

<p>CDI allows objects to be bound to lifecycle contexts, to be
    injected, to be associated with interceptors and decorators, and to
    interact in a loosely coupled fashion by
    {@linkplain jakarta.enterprise.event.Event firing} and
    {@linkplain jakarta.enterprise.event.Observes observing} events.
    {@linkplain jakarta.enterprise.inject Various kinds} of objects are
    injectable, including EJB 3 session beans, managed beans,
    {@linkplain jakarta.enterprise.inject.Produces producer methods} and
    Java EE resources. We refer to these objects in general terms as beans
    and to instances of beans that are bound to contexts as contextual
    instances.</p>

</body>

</html>
